﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections.ObjectModel;
using System.Collections;

namespace Processes.Tareas
{
    public class GestorTareas
    {
        public static bool CrearTarea(Model.Tareas.Tarea tarea)
        {
            try
            {
                return DataBase.Tareas.BDTareas.CrearTarea(tarea);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static bool CrearTareaPrograma(Model.Tareas.Tarea tarea)
        {
            try
            {
                return DataBase.Tareas.BDTareas.CrearTareaPrograma(tarea);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static Collection<Model.Programa> DevolversusProgramas(string ci,int ges)
        {
            try
            {
                return DataBase.Tareas.BDTareas.DevolverSusProgrmas(Convert.ToInt64(ci),ges);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static Collection<Model.Tareas.Tare> GetTareas(string nom, string gestion, bool todos, bool abiertos, bool cerrados)
        {
            try
            {
                if(string.IsNullOrEmpty(nom))
                    throw new Exception("*Debe llenar el campo de nombre");
                if (string.IsNullOrEmpty(gestion))
                    throw new Exception("*Debe llenar el campo de gestion");
                if (Convert.ToInt32(gestion) < 1967)
                    throw new Exception("*La gestion Debe ser mayor a 1967"); 
                return DataBase.Tareas.BDTareas.GetTareas(nom,gestion,todos,abiertos,cerrados);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static object GetTareasGestiones(string i, string f, bool todos, bool abiertos, bool cerrados)
        {
            try
            {
                if (string.IsNullOrEmpty(i))
                    throw new Exception("*Debe llenar el campo de gestion de inicio");
                if (string.IsNullOrEmpty(f))
                    throw new Exception("*Debe llenar el campo de gestion de fin");
                if (Convert.ToInt32(i)<1967)
                    throw new Exception("*La La gestion Debe ser mayor a 1967");
                if (Convert.ToInt32(i)>Convert.ToInt32(f))
                    throw new Exception("*La gestion Inicial no puede ser mayor a la gestion Final");
                return DataBase.Tareas.BDTareas.GetTareasGestion(i, f, todos, abiertos, cerrados);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static Collection<Model.Tareas.Tare> GestionEspecifica(string programa,string ges, bool todos, bool abiertos, bool cerrados)
        {
            try
            {
                if (string.IsNullOrEmpty(ges))
                    throw new Exception("*Debe llenar el campo de gestion");
                if (string.IsNullOrEmpty(programa))
                    throw new Exception("*Debe Seleccionar un programa");
                if (Convert.ToInt32(ges) < 1967)
                    throw new Exception("*La La gestion Debe ser mayor a 1967");
                return DataBase.Tareas.BDTareas.GetGestionEspecifica(programa,ges, todos, abiertos, cerrados);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static object GetRangoAProgramas(string programa, string inicio, string fin, bool todos, bool abiertos, bool cerrados)
        {
            try
            {
                if (string.IsNullOrEmpty(programa))
                    throw new Exception("*Debe Seleccionar un programa");
                if (string.IsNullOrEmpty(inicio))
                    throw new Exception("*Debe llenar el campo de gestion de inicio");
                if (string.IsNullOrEmpty(fin))
                    throw new Exception("*Debe llenar el campo de gestion de fin");
                if (Convert.ToInt32(inicio) < 1967)
                    throw new Exception("*La La gestion Debe ser mayor a 1967");
                if (Convert.ToInt32(inicio) > Convert.ToInt32(fin))
                    throw new Exception("*La gestion Inicial no puede ser mayor a la gestion Final");
                return DataBase.Tareas.BDTareas.GetRangoAProgramas(programa, inicio, fin, todos, abiertos, cerrados);
            }
            catch (Exception e)
            {
                throw e;
            }
        }

        public static void CerrarTarea(string p,bool sin,bool con)
        {
            try
            {
                int id = Convert.ToInt32(p);
                if (sin)
                    DataBase.Tareas.BDTareas.CerrarTarea(id);
                else
                {
                    if(con)
                    DataBase.Tareas.BDTareas.CerrarTareaPrograma(id);
                }
            }           
            catch (Exception exception)
            {
                throw exception;
            }
        }

        public static Model.Tareas.Tarea ObterTareaPorId(string id,bool relacionado)
        {
            try
            {
                return DataBase.Tareas.BDTareas.DevolverTareaPorId(id,relacionado);
            }
            catch (Exception ex)
            { 
                throw ex; 
            }
        }

        public static bool ModificarTarea(string id,string nombre ,string descripcion, DateTime feci, DateTime fecf,Int64 ciasignado,Int64 codprograma, bool relacionado)
        {          
            if(nombre=="")
                throw new Exception("El nombre de la tarea no puede ser vacio");
            if (descripcion == "")
                throw new Exception("La descripcion de la tarea no puede ser vacio");
            if(descripcion.Length > 150)
                throw new Exception("La descripcion no puede ser mayor a 150 caracteres");
            if(feci>fecf)
                throw new Exception("La fecha inicial no puede ser mayor que la final");
            if (feci.Year<1967)
                throw new Exception("*La La gestion Debe ser mayor a 1967");
            try
            {
                return DataBase.Tareas.BDTareas.modificarTarea(id,nombre, descripcion,feci,fecf,ciasignado,codprograma,relacionado);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static bool EliminarTarea(string id, bool relacionado)
        {
            try
            {
                return DataBase.Tareas.BDTareas.ElminarTarea(id, relacionado);
            }
            catch(Exception ex)
            {
                throw ex;
            }
        }

        public static bool HacerEvaluacion(long id, bool relacionado, string evalu)
        {
            try
            {
                int evaluacion=Convert.ToInt32(evalu);
                if (evaluacion == 0)
                    throw new Exception("La evaluacion de la tarea no puede ser 0 %");
                return DataBase.Tareas.BDTareas.GuardarEvaluacion(id,relacionado,evaluacion);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static Model.Tareas.Tarea GetTareas(string id, string rela)
        {
            try
            {
                bool relacionado = Convert.ToBoolean(rela);
                return DataBase.Tareas.BDTareas.GetTareas(id,relacionado);
            }
            catch(Exception ex)
            { throw ex; }
        }

        public static Collection<Model.Tareas.Tare> ListaDeTareasPendientes(string ci, int gestion, bool realacionado)
        {
            try
            {
                return DataBase.Tareas.BDTareas.Pendientes(ci,gestion,realacionado);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static ICollection reporte(long ci, int gestion)
        {
            try
            {
                return DataBase.Tareas.BDTareas.reportes(ci, gestion);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
